package sv.gob.mtps.hr.controller;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import sv.gob.mtps.hr.model.CatNivelAcademico;
import sv.gob.mtps.hr.model.CatTituloAcademico;
import sv.gob.mtps.hr.service.NivelAcademicoService;
import sv.gob.mtps.hr.service.TituloAcademicoService;


@Controller
public class NivelAcademicoController {
	
	@Autowired
	NivelAcademicoService nivelAcademicoService;
	
	@Autowired
	TituloAcademicoService tituloAcademicoService;
	
	@RequestMapping("/admin/showNiveles")
	public String listNiveles(Map<String, Object> map){
		map.put("nivel", new CatNivelAcademico());
		map.put("nivelesList", nivelAcademicoService.listNivelAcademico());
		return "/admin/nivelAcad";
	}
	
	@RequestMapping(value = "/admin/addNivel", method = RequestMethod.POST)
	public String addNivel(@ModelAttribute("nivel") @Valid CatNivelAcademico nivelAcademico, BindingResult result) {
		if (!result.hasErrors()) {
			
			nivelAcademicoService.addNivelAcademico(nivelAcademico);
			return "redirect:/admin/showNiveles";
		} else {
			return "";
		}

	}
	
	@RequestMapping(value = "/admin/editNivel", method = RequestMethod.POST)
	public String updateNivel(@ModelAttribute("nivel") @Valid CatNivelAcademico nivelAcademico, BindingResult result) {
		if (!result.hasErrors()) {
			
			nivelAcademicoService.updateNivelAcademico(nivelAcademico);
			return "redirect:/admin/showNiveles";
		} else {
			return "";
		}

	}
	
	@RequestMapping(value = "/admin/deleteNivel", method = RequestMethod.POST)
	public String deleteNivel(@ModelAttribute("nivel") @Valid CatNivelAcademico nivelAcademico, BindingResult result) {
			nivelAcademicoService.removeNivelAcademico(nivelAcademico.getIdNivelAcademico());
			return "redirect:/admin/showNiveles";
		

	}
	
/**
 * Detalle Nivel Has Titulos
 */
	
	@RequestMapping(value = "/admin/showTitulos")
	public  String showNivelTitulos(@ModelAttribute("nivel") CatNivelAcademico nivelAcademico,BindingResult result,Map<String, Object> map, HttpServletRequest request){
		try{
			
			CatTituloAcademico tituloAcademico = new CatTituloAcademico();
			tituloAcademico.setCatNivelAcademico(nivelAcademico);
			
			map.put("titulo", tituloAcademico);		
			map.put("titulosList", tituloAcademicoService.listTituloAcademico(tituloAcademico.getCatNivelAcademico().getIdNivelAcademico()));
			
			System.out.println(tituloAcademico.getCatNivelAcademico().getNivelAcedemico());
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
		
		return "/admin/tituloAcad";		
	}
	
	@RequestMapping(value = "/admin/showTitulosDet")
	public  String showNivelTitulosDet(@ModelAttribute("titulo") CatTituloAcademico tituloAcademico,BindingResult result,Map<String, Object> map, HttpServletRequest request){
		try{
			String idNivel = null;
			
			 idNivel = (String) request.getParameter("idNivel");
			 if(idNivel == null){
				 idNivel =String.valueOf(tituloAcademico.getCatNivelAcademico().getIdNivelAcademico()) ;
				 System.out.println("en el if..." + idNivel);
			 }
			System.out.println(idNivel);
			
			
			tituloAcademico.setGradoAcademico(null);
			tituloAcademico.setCatNivelAcademico(nivelAcademicoService.findNivelAcademico(Integer.parseInt(idNivel)));
			map.put("titulosList", tituloAcademicoService.listTituloAcademico(Integer.parseInt(idNivel)));
			
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
		
		return "/admin/tituloAcad";		
	}
	
	@RequestMapping(value = "/admin/addTitulo", method = RequestMethod.POST)
	public String addNivel(@ModelAttribute("titulo") @Valid CatTituloAcademico tituloAcademico, BindingResult result) {
		if (!result.hasErrors()) {
			System.out.println(tituloAcademico.getCatNivelAcademico());
			CatNivelAcademico na = nivelAcademicoService.findNivelAcademico(tituloAcademico.getCatNivelAcademico().getIdNivelAcademico());
			tituloAcademico.setCatNivelAcademico(na);
			tituloAcademicoService.addTituloAcademico(tituloAcademico);
			return "redirect:/admin/showTitulosDet?idNivel="+na.getIdNivelAcademico();
		} else {
			return "";
		}

	}
	
	@RequestMapping(value = "/admin/editTitulo", method = RequestMethod.POST)
	public String editNivel(@ModelAttribute("titulo") @Valid CatTituloAcademico tituloAcademico, BindingResult result) {
		if (!result.hasErrors()) {
			System.out.println(tituloAcademico.getCatNivelAcademico());
			CatNivelAcademico na = nivelAcademicoService.findNivelAcademico(tituloAcademico.getCatNivelAcademico().getIdNivelAcademico());
			tituloAcademico.setCatNivelAcademico(na);
			tituloAcademicoService.updateTituloAcademico(tituloAcademico);
			return "redirect:/admin/showTitulosDet?idNivel="+na.getIdNivelAcademico();
		} else {
			return "";
		}

	}
	
	@RequestMapping(value = "/admin/deleteTitulo", method = RequestMethod.POST)
	public String deleteNivel(@ModelAttribute("titulo") @Valid CatTituloAcademico tituloAcademico, BindingResult result) {
		
			tituloAcademicoService.removeTituloAcademico(tituloAcademico.getIdGradoAcademico());
			return "redirect:/admin/showTitulosDet?idNivel="+tituloAcademico.getCatNivelAcademico().getIdNivelAcademico();
		
	}
}
